package com.sky.controller.admin;

import com.sky.constant.JwtClaimsConstant;
import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.dto.EmployeePageQueryDTO;
import com.sky.entity.Employee;
import com.sky.properties.JwtProperties;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.EmployeeService;
import com.sky.utils.JwtUtil;
import com.sky.vo.EmployeeLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 员工管理
 */
@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "员工相关")
public class EmployeeController {

	@Autowired
	private EmployeeService employeeService;
	@Autowired
	private JwtProperties jwtProperties;

	/**
	 * 登录
	 *
	 * @param employeeLoginDTO
	 * @return
	 */
	@PostMapping("/login")
	@ApiOperation("员工登录")
	public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {
		log.info("员工登录：{}", employeeLoginDTO);

		Employee employee = employeeService.login(employeeLoginDTO);

		//登录成功后，生成jwt令牌
		Map<String, Object> claims = new HashMap<>();
		claims.put(JwtClaimsConstant.EMP_ID, employee.getId());
		String token = JwtUtil.createJWT(jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), claims);

		EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder().id(employee.getId()).userName(employee.getUsername()).name(employee.getName()).token(token).build();

		return Result.success(employeeLoginVO);
	}

	/**
	 * 退出
	 *
	 * @return
	 */
	@ApiOperation("员工退出")
	@PostMapping("/logout")
	public Result<String> logout() {
		return Result.success();
	}

	@ApiOperation("新增员工")
	@PostMapping
	public Result<Object> save(@RequestBody EmployeeDTO employeeDTO) {
		log.info("新增员工，员工数据：{}", employeeDTO);
		employeeService.save(employeeDTO);
		return Result.success();
	}

	@ApiOperation("员工信息分页查询")
	@GetMapping("/page")
	public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) {
		log.info("员工信息分页查询：{}", employeePageQueryDTO);
		PageResult pageResult = employeeService.page(employeePageQueryDTO);
		return Result.success(pageResult);
	}

	@ApiOperation("员工状态修改")
	@PostMapping("/status/{status}")
	public Result<Object> startOrStop(@PathVariable("status") Integer status, Long id) {
		log.info("员工状态修改：{},{}", status, id);

		employeeService.startOrStop(status, id);
		return Result.success();
	}

	@ApiOperation("更具id查询员工")
	@GetMapping("/{id}")
	public Result<Employee> getById(@PathVariable("id") Long id) {
		log.info("员工id查询员工：{}", id);
		return Result.success(employeeService.getById(id));
	}

	@ApiOperation("编辑员工信息")
	@PutMapping
	public Result<Object> update(@RequestBody EmployeeDTO employeeDTO) {
		log.info("编辑员工信息：{}", employeeDTO);
		employeeService.update(employeeDTO);
		return Result.success();
	}
}
